package com.jsh.erp.service.rebateItem;

import com.alibaba.fastjson.JSONObject;
import com.jsh.erp.datasource.entities.PromotionHead;
import com.jsh.erp.datasource.entities.RebateItem;
import com.jsh.erp.datasource.entities.RebateItemExample;
import com.jsh.erp.datasource.mappers.RebateItemMapper;
import com.jsh.erp.datasource.mappers.RebateItemMapperEx;
import com.jsh.erp.exception.JshException;
import com.jsh.erp.service.systemConfig.SystemConfigService;
import com.jsh.erp.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

@Service
public class RebateItemService {
    private Logger logger = LoggerFactory.getLogger(RebateItemService.class);

    @Resource
    private RebateItemMapper rebateItemMapper;
    @Resource
    private SystemConfigService systemConfigService;

    @Resource
    private RebateItemMapperEx rebateItemMapperEx;

    public RebateItem getRebateItem(String id)throws Exception {
        RebateItem result=null;
        try{
            result=rebateItemMapper.selectByPrimaryKey(id);
        }catch(Exception e){
            JshException.readFail(logger, e, systemConfigService.getLanCode());
        }
        return result;
    }

    public List<RebateItem> getRebateItem()throws Exception {
        RebateItemExample example = new RebateItemExample();
        example.createCriteria();
        List<RebateItem> list=null;
        try{
            list=rebateItemMapper.selectByExample(example);
        }catch(Exception e){
            JshException.readFail(logger, e, systemConfigService.getLanCode());
        }
        return list;
    }

    public List<RebateItem> select(String rebateItemId, int offset, int rows)throws Exception {
        List<RebateItem> list=null;
        try{
            list=rebateItemMapperEx.selectByConditionRebateItem(rebateItemId, offset, rows);
        }catch(Exception e){
            JshException.readFail(logger, e, systemConfigService.getLanCode());
        }
        return list;
    }


    @Transactional(value = "transactionManager", rollbackFor = Exception.class)
    public int insertRebateItem(JSONObject obj, HttpServletRequest request) throws Exception{
        RebateItem rebateItem = JSONObject.parseObject(obj.toJSONString(), RebateItem.class);
        rebateItem.setUploadFlag("0");
        int result=0;
        try{
            result=rebateItemMapper.insertSelective(rebateItem);
        }catch(Exception e){
            JshException.writeFail(logger, e, systemConfigService.getLanCode());
        }
        return result;
    }

    @Transactional(value = "transactionManager", rollbackFor = Exception.class)
    public int updateRebateItem(JSONObject obj, HttpServletRequest request) throws Exception{
        RebateItem rebateItem = JSONObject.parseObject(obj.toJSONString(), RebateItem.class);
        rebateItem.setUploadFlag("0");
        int result=0;
        try{
            result = rebateItemMapper.updateByPrimaryKeySelective(rebateItem);
        }catch(Exception e){
            JshException.writeFail(logger, e, systemConfigService.getLanCode());
        }
        return result;
    }

    @Transactional(value = "transactionManager", rollbackFor = Exception.class)
    public int deleteRebateItem(String id, HttpServletRequest request)throws Exception {
        RebateItem rebateItem = new RebateItem();
        rebateItem.setId(id);
        rebateItem.setDeleteFlag("1");
        rebateItem.setUploadFlag("0");
        int result=0;
        try{
            result=rebateItemMapper.updateByPrimaryKeySelective(rebateItem);
        }catch(Exception e){
            JshException.writeFail(logger, e, systemConfigService.getLanCode());
        }
        return result;
    }

    @Transactional(value = "transactionManager", rollbackFor = Exception.class)
    public int batchDeleteRebateItem(String ids, HttpServletRequest request)throws Exception {
        List<String> idList = StringUtil.strToStringList(ids);
        RebateItemExample example = new RebateItemExample();
        example.createCriteria().andIdIn(idList);
        RebateItem rebateItem = new RebateItem();
        rebateItem.setDeleteFlag("1");
        rebateItem.setUploadFlag("0");
        int result=0;
        try{
            result=rebateItemMapper.updateByExampleSelective(rebateItem,example);
        }catch(Exception e){
            JshException.writeFail(logger, e, systemConfigService.getLanCode());
        }
        return result;
    }

//    public int updateRebateItemByKey(String platformKey, String platformValue)throws Exception {
//        int result=0;
//        try{
//            RebateItem rebateItem = new RebateItem();
//            rebateItem.setPlatformValue(platformValue);
//            RebateItemExample example = new RebateItemExample();
//            example.createCriteria().andPlatformKeyEqualTo(platformKey);
//            result = rebateItemMapper.updateByExampleSelective(rebateItem, example);
//        }catch(Exception e){
//            JshException.writeFail(logger, e, systemConfigService.getLanCode());
//        }
//        return result;
//    }

    public RebateItem getRebateItemByKey(String rebateItemId)throws Exception {
        RebateItem rebateItem = new RebateItem();
        try{
            RebateItemExample example = new RebateItemExample();
            example.createCriteria().andRebateIdEqualTo(rebateItemId);
            List<RebateItem> list=rebateItemMapper.selectByExample(example);
            if(list!=null && list.size()>0){
                rebateItem = list.get(0);
            }
        }catch(Exception e){
            JshException.readFail(logger, e, systemConfigService.getLanCode());
        }
        return rebateItem;
    }

    public Long countRebateItem(String rebateItemId) {
        Long result = null;
        try {
            result = rebateItemMapperEx.countRebateItem(rebateItemId);
        } catch (Exception e) {
            JshException.readFail(logger, e, systemConfigService.getLanCode());
        }
        return result;
    }
}
